class MinStack {
public:
    MinStack() {

    }

    void push(int val) {
        if (st_pop.empty() || val <= st_pop.top())
        {
            st_pop.push(val);
        }
        st_push.push(val);
    }

    void pop() {
        if (st_push.top() == st_pop.top())
        {
            st_pop.pop();
        }
        st_push.pop();
    }

    int top() {
        return st_push.top();
    }

    int getMin() {
        return st_pop.top();
    }

    stack<int> st_push;
    stack<int> st_pop;
};

